#5-15 字典的创建与删除
d={10:'cat',20:'dog',30:'bird',20:'zoo'}
print(d) #key相同时后者覆盖

#zip函数
lst1=[10,20,30,40]
lst2=['cat','dog','bird','zoo','car']
zipobj=zip(lst1,lst2)
print(zipobj)
# print(list(zipobj))

d=dict(zipobj)
print(d)

#参数创建字典
d=dict(cat=10,dog=20)
print(d)

t=(10,20,30)
print({t:10})  #元组可以作为key,理解为三维坐标，对应一个值
#列表不可作为key，它不是可变数据类型
# lst=[10,20,30]
# print({lst:10}) # TypeError: unhashable type: 'list'

# 字典属于序列
print('max:',max(d))
print('min:',min(d))
print('len:',len(d))
# 字典的删除
del d
# print(d)
print('-'*50)

#5-16 字典的访问和遍历
d={'hello':10,'world':20,'python':30}
# 访问字典中的元素
# (1)使用d[key]
print(d['hello'])
#(2)d.get(key)
print(d.get('hello'))

# 二者之间是有区别的，如果key不存在，d[key]报错d.get(key)可以指定默认值
#print(d['java']) # KeyError: 'java'
print(d.get('java')) # None
print(d.get('java','不存在'))


# 字典的遍历
for item in d.items():
    print(item) # key=value组成的一个元素

# 在使用for循环遍历时，分别获取key,value
for key,value in d.items():
    print(key,'--->',value)

print('-'*50)
#5-17 字典的相关操作
d={1001:'李梅',1002:'王华',1003:'张三'}
print(d)
#添加元素
d[1004]='李四'
print(d)
#获取所有key
keys=d.keys()
print(keys)
print(list(keys))
print(tuple(keys))

#获取所有value
values=d.values()
print(values)
print(list(values))
print(tuple(values))
# 如果将字典中的数据转成key-value的形式,以元组的方式进行展现
lst=list(d.items())
print(lst)
d=dict(lst)
print(d)

# 使用pop函数
print(d.pop(1001))
print(d)

print(d.pop(1008,'不存在'))


# 随机删除
print(d.popitem())
print(d)


# 清空字典中所有的元素
d.clear()
print(d)
# Python中一切皆对象，每个对象都有一个布尔值
print(bool(d)) # 空字典的布尔值为False

print('-'*50)
#5-18字典生成式

import random
d={item :random.randint(1,100) for item in range(4)}
print(d)

# 创建两个列表
lst=[1001,1002,1003]
lst2=['陈梅梅','王一一','李丽丽']
d={key:value for key,value in zip(lst,lst2)}
print(d)

